package com.test.ad.demo.util;

import android.content.Context;
import android.provider.Settings;
import android.util.Log;

public class DeviceInfoUtil {
    private static final String TAG = "DeviceInfoUtil";

    /**
     * 获取Android ID
     *
     * @param context 上下文对象
     * @return Android ID，获取失败返回null
     */
    public static String getAndroidId(Context context) {
        try {
            String androidId = Settings.Secure.getString(
                    context.getContentResolver(),
                    Settings.Secure.ANDROID_ID
            );

            // 检查Android ID是否有效
            if (isValidAndroidId(androidId)) {
                return androidId;
            } else {
                Log.w(TAG, "获取到的Android ID无效: " + androidId);
                return null;
            }
        } catch (Exception e) {
            Log.e(TAG, "获取Android ID时发生异常", e);
            return null;
        }
    }

    /**
     * 验证Android ID是否有效
     *
     * @param androidId 要验证的Android ID
     * @return 如果有效返回true，否则返回false
     */
    private static boolean isValidAndroidId(String androidId) {
        // Android ID应该是16进制字符串，长度为16
        if (androidId == null || androidId.length() != 16) {
            return false;
        }

        // 检查是否全部为16进制字符
        return androidId.matches("[0-9A-Fa-f]{16}");
    }

    /**
     * 获取Android ID，如果获取失败则返回默认值
     *
     * @param context 上下文对象
     * @param defaultValue 获取失败时返回的默认值
     * @return Android ID或默认值
     */
    public static String getAndroidId(Context context, String defaultValue) {
        String androidId = getAndroidId(context);
        return androidId != null ? androidId : defaultValue;
    }

    /**
     * 检查设备是否支持获取Android ID
     *
     * @return 支持返回true，否则返回false
     */
    public static boolean isAndroidIdSupported() {
        // Android ID从API Level 1就开始支持
        return true;
    }
}